package com.bird.main;

import com.bird.util.GameUtil;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

public class GameFrontGround {
    //似乎不可以用一朵云，否则云不会动，教程中使用两朵云。
    //两张一样的图片
    private static final int CLOUD_SPEED = 2;
    private List<Cloud> clouds;
    private BufferedImage[] image;

    private Random random;

    public GameFrontGround() {
        clouds = new ArrayList<>();
        //加上后缀名.png
        image = new BufferedImage[2];
        image[0] = GameUtil.loadBufferedImage("img/cloud.png");
        image[1] = GameUtil.loadBufferedImage("img/cloud.png");
        random = new Random();
    }

    public void draw(Graphics g) {
        logic();
        for (Cloud c : clouds) {
            c.draw(g);
        }
    }

    //控制云的数量(这个方法的顶级调用是一直在运行中的,所以它一直在执行)
    private void logic() {
        // 二十五分之一的概率,每一刻都有可能生成一个云
        if ((500 * Math.random()) < 5) {
            Cloud cloud = new Cloud(CLOUD_SPEED, 600, random.nextInt(150), image[random.nextInt(2)]);
            clouds.add(cloud);
        }

        /* 注意不可以一边使用for-each循环,一边改变遍历列表的结构
        *                 iterator.remove();
        * 使用这种做法是安全的，因为它不会抛出 ConcurrentModificationException，
           也不会在迭代过程中留下任何未处理的元素。迭代器会自动更新，继续指向下一个元素，从而继续迭代过程。*/
        Iterator<Cloud> iterator = clouds.iterator();
        while (iterator.hasNext()) {
            Cloud cloud = iterator.next();
            if (cloud.isOutFrame()) {
                iterator.remove();
                System.out.println("云" + cloud + "被移除clouds数组");
            }
        }
    }
}


